1. Field of the Invention
This invention is related to virtual machines and storage systems used by the virtual machines.
2. Description of the Related Art
Virtual machines have a variety of uses in computer systems. For example, virtual machines are used to provide several users with concurrent access to a single physical computer system. Each user executes applications in a different virtual machine, and the virtual machines are scheduled for execution on the computer system hardware. The processing power of the computer system can be more effectively utilized by providing multiple virtual machines on the computer system. Additionally, user's activities are protected from the operation of other user's programs via the division into virtual machines. Virtual machines can also be used during software development to test the software on various hardware configurations (e.g. each hardware configuration is represented by a differently-configured virtual machine). Virtual machines can be used to consolidate tasks that were previously running on separate computer systems by assigning each task to a virtual machine and running the virtual machines on fewer computer systems. There are many other uses for virtual machines as well.
Because of their usefulness, virtual machines are being deployed more frequently across the computing spectrum. Additionally, the continued increase in processing power that is available on a single computer system (and especially on larger server systems) makes the overhead of the virtual machine less noticeable to the user, and permits more virtual machines to be executed on a single computer system.
Since a virtual machine encapsulates a given user's system state, virtual machines are portable from computer system to computer system (assuming that the computer systems are running the same or compatible virtual machine monitors that control the virtual machines). Accordingly, a highly available solution to supporting virtual machines may include a cluster of computer systems (referred to as nodes) executing virtual machines. A given node is executing a given virtual machine at any point in time, and the virtual machine can be failed over to another node if a failure is detected. Similarly, in a non-virtual machine environment, applications can be failed over to other nodes.
One type of failure that can occur is an input/output (I/O) failure to the storage device(s) used by the application. The I/O failure can occur due to a loss of connectivity to the storage device(s), due to failures in the storage device(s) themselves, and other reasons. The I/O failure is reported to the application, which attempts to recover from the failure.